﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Elmah;
using MIAP.Negocio;
using MIAP.Negocio.Utiles;
using Resources;

namespace MIAPWEB.Common
{
    public class EnvioCorreo
    {

        /// <summary>
        /// Instancia unica de la clase.
        /// </summary>
        public static readonly EnvioCorreo Instance = new EnvioCorreo();

        private EnvioCorreoNegocio _envioNegocio;

        /// <summary>
        /// Constructor Privado. Evita la creacion de una instancia predeterminada de la clase <see cref="EnvioCorreo"/>
        /// </summary>        
        private EnvioCorreo()
        {
             var negocio = new ConfiguracionNegocio();
                var user = negocio.GetNombreUserCorreo().Descripcion;
                var passw = negocio.GetNombrePasswordcorreo().Descripcion;
                var dominio = negocio.GetNombreDominioCorreo().Descripcion;
                var from = negocio.GetFromEnvioCorreo().Descripcion;
            try
            {               
                this._envioNegocio = new EnvioCorreoNegocio(user, passw, dominio, from);
            }
            catch (Exception e)
            {
                //registramos el error en elmah sin que impida al usuario la continuacion del correo
                var exeption = new Exception(String.Format(Strings.ErrorCorreo, user,dominio, passw,from), e);
                ErrorSignal.FromCurrentContext().Raise(exeption);
            }
        }

        /// <summary>
        /// Evia el correo de solicitud de recarga a la lista de archivos proporcionados
        /// </summary>
        /// <param name="listAddressTo">lista de correos de la cual mandaremos</param>
        /// <param name="nombreArchivo">Nombre del archivo que se requiere realizar la recarga</param>
        public void EnviaCorreoSolicitud(IEnumerable<string> listAddressTo, string nombreArchivo)
        {
            if (this._envioNegocio == null)
                return;
            try
            {
                this._envioNegocio.EnviaCorreoSolicitud(listAddressTo, nombreArchivo);
            }
            catch (Exception e)
            {
                //registramos el error en elmah sin que impida al usuario la continuacion del correo
                ErrorSignal.FromCurrentContext().Raise(e);
            }
        }

        /// <summary>
        /// Envia correo de respuesta de la solicitud
        /// </summary>
        /// <param name="addressTo">direccion a donde enviaremos la respuesta (solicitante)</param>
        /// <param name="esAutorizado">true si la solicitud es autorizada, false en caso contrario</param>
        /// <param name="nombreArchivo">Nombre del archivo del cual se envia la solicitud</param>
        /// <param name="comentarios">comentarios que el autorizador indica.</param>
        public void EnviaCorreoRespuestaSolicitud(string addressTo, bool esAutorizado, string nombreArchivo,
                                                  string comentarios)
        {
            if (this._envioNegocio == null)
                return;
            try
            {
                this._envioNegocio.EnviaCorreoRespuestaSolicitud(addressTo, esAutorizado, nombreArchivo, comentarios);
            }
            catch (Exception e)
            {
                //registramos el error en elmah sin que impida al usuario la continuacion del correo
                ErrorSignal.FromCurrentContext().Raise(e);
            }
        }
    }
}